home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dr. Windows 3
/
dr win3.zip
/
dr win3
/
VISUALBA
/
SCROLVB.ZIP
/
SCROLL-1.TXT
< prev
next >
Wrap
Text File
|
1994-02-01
|
8KB
|
171 lines
> Program: SCROLL-1 - Visual Basic Demo Code
> Written By: Paul T. Dawson, P.O. Box 682, Chincoteague, VA, 23336
> Summary: VB 2.0 or 3.0 sample code that demonstrates "form scrolling".
No VBX controls required. No API calls required. No cost (free!).
> Requirements: To run the SCROLL-1.EXE file - Windows 3.x and VBRUN200.DLL.
To use the sample code - Visual Basic 2.0 or higher.
> Design Goals:
1. Make a resizable form, with scroll bars to move around a large area.
2. Use the minimum amount of code.
3. Use default values wherever possible.
4. Add lots of comments!
> File List:
SCROLL-1.TXT - This File (no margins or page breaks).
SCROLL-1.MAK - Visual Basic Project.
SCROLL-1.FRM - Visual Basic Form.
SCROLL-1.FRX - Visual Basic Graphics (just one little icon).
SCROLL-1.EXE - Finished EXE file.
> Design Summary:
This program uses one standard resizable form, and a "scrolling" picture
box for the "container" for all of the controls. There are two scroll bars
on the form that let the user scroll around the picture box. The program
moves the scroll bars to their new locations every time the main form is
resized. Then the user can scroll anywhere in the picture box.
The scrolling picture box can be many times larger than the screen, and
any control can be placed anywhere on it.
> Details About Objects:
1. frmMain:
The main form has a ScaleMode of 3 (pixel).
Everything else on the form is default.
2. hsb1 / vsb1:
The two scroll bars are in temporary locations on the form.
They will be automatically moved to the edges when you click cmdStart.
The values of SmallChange and LargeChange are 10 and 50. These values
are not critical, and they can be changed. Everything else is default.
3. picCorner:
This is the little grey box that goes into the lower right corner.
The BorderStyle is 1, and the BackColor is light grey. You can change
the BackColor to something else, if you want to see exactly where
picCorner lands!
4. picBig:
This is the big scrolling picture box. In this demo, it starts out
relatively small. Then cmdStart resizes it to be larger than the form.
The picBig AutoRedraw property is set to False, which is the default.
If you set the picBig AutoRedraw to True, then it will be easier to
print and draw graphics directly on picBig. However, AutoRedraw=True
uses a LOT of memory, so it's best to leave it False!
With AutoRedraw=False, I have successfully tested this up to 16,383 by
16,383 pixels, the equivalent of 873 standard VGA screens. Above that
number, which is (2^14)-1, things start to get flakey. The picture box
will not display properly, most likely because of some internal VB
restriction! On my machine, VB says 16,383 pixels is 170 inches, or just
over 14 feet. So you can have a scrolling picture box that covers 200
actual square feet. That should be sufficient!
The picBig ScaleMode is set to 3 (pixel) - this is important for this
demo program, and it's just a lot more convenient than "Twips". You can
always use Twips in other programs, if you really want to!
After putting the scroll bars and the picture boxes on the form, it's
important to select the picBig box and hit "Edit - Send to Back", so it
won't ever cover the scroll bars or the picCorner box.
The picBig BackColor is cyan - this isn't critical.
5. lblDownLeft / lblDownRight / lblUpLeft / lblUpRight:
The four labels on the picBig control are just samples, to show how all
controls in a "container" keep the same location in the container, even
if the container moves around, or part of it is hidden.
6. cmdStart:
When you click this, everything starts to happen! This button was added
for the convenience of people without VB who just want to try the EXE
file. It just makes things more interesting to see all of the controls
before they are resized.
7. cmdExit(0 to 7):
These are some extra non-critical controls that I added to picBig, to
make the scrolling more visible. For a "real" program, these would all
be replaced with "real" controls that actually did something. Actually,
in this program, all of these buttons do something - end the program!
> Miscellaneous Notes:
1. The horizontal scroll bar can be any height, and the vertical one can
be any width. Try changing these, and you'll see that the code adjusts
EVERYTHING to match!
2. Remember, any type of control can be placed onto the picBig control!!!
3. In writing this program, I found that the first EASY part was getting
the scroll bars to jump to the edges after every form resize. The second
EASY part was using the scroll bars to move the big picture box around.
The completely unexpected HARD part was taking care of problems when
just one scroll bar is visible!?!
It's easy to place things when both scroll bars are either visible or
invisible. However, when just one is visible, things get complicated!
For example, if the entire width of picBig is visible, then the
horizontal scroll bar can be turned off. Well, when you remove that from
the bottom of the form, right away you have to check if the entire
height of picBig is visible!
The opposite is when the entire height is visible - then you turn off
the vertical scroll bar, and you have to check if that makes the entire
width of picBig visible!
In either case, you have to erase the picCorner box, and then adjust the
scroll bar again to fill in that space - whew!
The solution that I finally used was to set up three flags, for the one
corner box and the two scroll bars. The Form_Resize event will call the
FixScrollBars sub, where these flags are all set to False, and then with
some repetitive lines (all 16 of them), none/some/all of these flags are
set to True.
Then all three controls are put in the right places, and turned on or
off depending on what the flags say!
This system will always work properly. While testing this program, I put
a loop around those lines, so instead of checking once, it checked 1000
times. The total time required was 18 seconds, or .018 second for just
one "normal" check. That's fast enough (tested on a slow 386 even)!
4. In the FixScrollBars sub, there are several "+1" and "+2" variations in
the sizes of the scroll bars. These are necessary to make everything
line up perfectly. I used "ZoomIn" to look closely at each combination,
and make sure everything was exact!
5. For VB beginners, here's how to put new controls INTO a container:
First, select the container (usually a picture box or frame). Then,
while it is selected, move over to the toolbox and click on the control
you want. Move the mouse pointer back over the container, and THEN hold
down the button, drag, and release. The new control should be inside the
container now. To make sure, select it and try to drag it off the
container. If you can't, then the operation was successful!
Having a control IN a container is completely different than having a
control ON TOP of a container. If you create a control and then drag it
on top of a picture box, it will NOT be "in" that container. If you move
the picture box, the control will NOT move with it!
To move an existing control INTO a container, here's what to do: Select
the control, and hit "ALT E" and "T". This will cut the control, which
means it will disappear from the form. Then select the container, and
while it is selected, hit "CTRL V" and the control will be pasted into
the container.
6. Please experiment on non-critical projects first!
/**** <End Of This File> - <10-29-93> - <P.T.D.> ****/